شاید قبل از اینکه بخواهیم خطای 404 را با کد 301 ریدایرکت مقایسه کنیم، باید اول ببینیم که پاسخ یک سرور در حالت عادی چگونه است و اصلا این کدها به چه معنی هستند!
طبق استاندارد ارتباط تحت وب، در تعامل بین واسطه های کاربری (user agent) و سرور (مثلا تعامل بین مرورگر و سرور) کدهایی به عنوان پاسخ به مرورگر ارسال می شود که وضعیت صفحه درخواست شده را نشان می دهد، این کد در حالت معمول با عدد 200 فرستاده می شود که نشان دهنده مرتب بودن اوضاع و سالم بودن سرور و صفحه درخواستی است، اما همیشه وضع به این منوال نیست و گاهی خواسته یا ناخواسته ممکن است مشکلی وجود داشته باشد و سرور نتواند صفحه را به درستی در پاسخ درخواست ارسال کند، در اینجاست که اهمیت کدهای خطا مشخص می شود، شاید یک کاربر معمولی برایش چندان فرقی نکند که چه کدی از طرف سرور ارسال شده است، اما موتورهای جستجو به دلیل ماهیتشان نمی توانند مثل انسان اوضاع را تجزیه تحلیل کنند و تنها به کدی که به آنها برگردانده می شود اهمیت می دهند، حال تصور کنید سایتی دچار مشکل شده است اما با این وجود در مقابل درخواست ربات جستجوگر کد 200 ok را برگرداند، واضح است که ربات فکر می کند همه چیز مرتب است و صفحه دارای مشکل را که بعضا ممکن است خالی هم باشد یا پیام خطا در آن نشان داده شده باشد، ایندکس (ذخیره) کند؛ برای جلوگیری از بروز اینگونه مشکلات از کدهای خطای 404 و 301 ریدایرکت استفاده می کنند که البته هر کدام موارد استفاده جداگانه ای دارند که در ادامه به آنها اشاره خواهیم کرد.
خطای 404، صفحه مورد نظر پیدا نشد!
خطای 404 یا Not Found به معنی این است که سرور نمی تواند صفحه یا فایل درخواستی شما را پیدا کند، دلیل خطای 404 یا Not Found می تواند حذف یک لینک، مطلب یا فایل باشد، گاهی مواقع برای اینکه به ربات های جستجوگر بگوییم که یک لینک یا فایل دیگر وجود ندارد و آن را از لیست جستجو حذف کن، باید با کد 404 به درخواست آنها پاسخ دهیم، معمولا سرورها در حالت عادی این کار را برای لینک ها و فایل هایی که واقعا وجود ندارند به صورت خودکار انجام می دهند اما گاهی نیاز به این داریم که به صورت آگاهانه ای این کد رابه اصطلاح برگردانیم، مثلا برای دایرکتوری هایی که از نظر ما حساس هستند و نمی خواهیم ربات، آنها را پیدا کند و یا در مورد لینک های داینامیک که ممکن است سرور به جای خطای 404، صفحه اصلی سایت را نمایش دهد، در این حالت ها یک کد خطای 404 تنظیم می کنیم و خواهیم دید که خزنده های جستجوگر بعد از چند بار مراجعه، نهایتا منصرف خواهند شد و آن لینک را به عنوان لینک مُرده فرض می کنند.
چگونه خطای 404 را تنظیم کنیم؟
تنظیم خطای 404 بسته به اینکه هدفتان چه باشد می تواند کار ساده و در عین حال حساسی باشد، اشتباه در اینکار می تواند به قیمت حذف سایت یا صفحه شما از لیست نتایج جستجو باشد، با این وجود برای اینکار معمولا دو راه پرکاربرد وجود دارد، استفاده از فایل htaccess. و یا زبان های سمت سرور مثل PHP یا ASP، در مثال های زیر روش استفاده از فایل htaccess. و PHP را ملاحظه می کنید.
تنظیم خطای 404 با فایل htaccess.
در سرورهای Apache معمولا می توان با ایجاد فایلی با نام htaccess. در ریشه سایت، بر روی اینگونه عملکردهای سرور کنترل داشت (در این رابطه باید از پشتیبانی هاست خود سوال کنید)، همانطور که گفتیم سرورها در حالت معمول به طور خودکار خطای 404 را برای صفحات و فایل هایی که پیدا نشوند نشان خواهند داد، اما برای تنظیم یک صفحه سفارشی که کاربر را پس از دریافت خطا، راهنمایی کند یا او را به آدرس دیگری منتقل نماید، می توان از کدی مشابه کد زیر استفاده کرد.
ErrorDocument 404 /404errorpage.html
کافی است کد بالا را در فایل htaccess. قرار دهید (اگر این فایل در سرور وجود ندارد می توانید به راحتی با notepad آن را بسازید)، از این به بعد سرور به جای نمایش صفحه پیش فرض، صفحه موجود در ریشه سایت با نام 404errorpage.html را نشان خواهد داد، همچنین می توان این صفحه را در یک فولدر دیگر نیز قرار دارد.
ErrorDocument 404 /error/404errorpage.html
دقت کنید که حتما آدرس ها باید به شکل بالا در یک خط و به صورت دایرکتوری تنظیم شده باشند، به فرض تنظیم به صورت http://www.example.com/error/404errorpage.html صحیح نیست؛ از طرفی می توانید درون صفحه 404 سفارشی، از متاتگ های robots و مقادیر noindex استفاده کنید تا از عدم ذخیره صفحه توسط ربات ها اطمینان حاصل نمائید.
<meta name="robots" content="noindex" />
این متاتگ را باید در قسمت هِدر صفحه 404، بین تگ های head قرار دهید.
تنظیم خطای 404 با کد php http header
علاوه بر htaccess می توان با کدهای php نیز خطاهای 404 را مدیریت کرد، بدین منظور کافی است با استفاده از توابع header کد 404 را در پاسخ درخواست به سرور، ارسال کنید.
<?php
header('HTTP/1.0 404 Not Found');
?>
دقت کنید که کدهای مربوط به header در php باید قبل از ارسال هر نوع خروجی html، ارسال شوند، در غیر اینصورت با خطا ی header already sent مواجه خواهید شد.
علاوه بر خطای 404 رسمی، نوعی خطای 404 موسوم به Soft 404 error وجود دارد که در اینجا فقط صفحه خطا به کاربر حقیقی نشان داده می شود، بدون اینکه کد هِدر 404 از طرف سرور ارسال شود (در عوض کد 200 ارسال می شود)، این کار می تواند در مواقع خیلی خاصی که نیاز به غیر فعال کردن موقت یک صفحه یا لینک، صرفا از دید کاربران (و نه موتورهای جستجو) است مفید باشد.
کد 301 ریدایرکت چیست؟
گفتیم که خطای 404 برای صفحات و لینک هایی مناسب است که می خواهیم از لیست جستجو حذف شوند یا دیگر مورد درخواست ربات های خزنده واقع نشوند، اما فرض کنید به تازگی سایت خود را از یک دامنه، به آدرس دیگری منتقل یا تغییراتی در ساختار لینک های خود اعمال کرده باشید، مسلم است که اگر بدون اطلاع موتورهای جستجو این کار را انجام دهید تمام تلاش های شما و اعتبار کسب شده برای آن سایت و لینک های قبلی، به هَدَر خواهد رفت، اما اگر یک کد 301 ریدایرکت را به درستی تنظیم نمائید، موتورهای جستجو و کاربران به راحتی و بدون از دست رفتن اعتبار قبلی، به آدرس جدید هدایت می شوند، در مورد موتورهای جستجو وقتی آنها در پاسخ درخواستشان، کد 301 را دریافت می کنند، لینک قدیمی را با آدرس جدید جایگزین کرده و تمام وِیژگی ها، رنک و امتیازات را انتقال می دهند (البته معمولا این کار مدت کوتاهی طول می کشد)، در مورد کاربران نیز به طور خودکار به لینک جدید هدایت می شوند (حتی ممکن است سرعت انتقال در حدی باشد که آنها متوجه نشوند).
تنظیم کد 301 ریدایرکت در فایل htaccess.
مانند خطای 404 می توان کد 301 ریدایرکت را هم در فایل htaccess. تنظیم کرد، به فرض در مثال زیر ما اینکار را برای فایل index.html انجام داده ایم و کاربر را به صفحه اصلی هدایت کرده ایم.
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.html
RewriteRule ^index.html$ http://webgoo.ir [R=301,L]
دقت کنید که ممکن است برخی سرورها قابلیت کنترل با فایل htaccess. را غیر فعال کرده باشند (معمولا این کار را نمی کنند)، در اینگونه موارد باید با پشتیبان هاست خود صحبت کنید.
تنظیم کد 301 ریدایرکت با php http header
با استفاده از دستورا php http header و تنظیم یک آدرس جهت انتقال، می توان یک لینک را به اصطلاح برای همیشه منتقل کرد، این کار را در مثال زیر انجام داده ایم.
<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://webgoo.ir');
die();
?>
ملاحظه می کنید که شرایط و موقعیت های استفاده از خطای 404 با 301 ریدایرکت فرق می کند و باید هوشمندانه و به جا از این کدها استفاده نمود.
چگونه کدهای دریافتی از سرور را بررسی کنیم؟
شاید برای شما هم این سوال مطرح باشد که چگونه می توان فهمید یک سرور در پاسخ درخواست ها چه کدی را برمی گرداند، جواب بسیار ساده است، در مرورگرهایی نظیر فایرفاکس، گوگل کروم و... (مخصوصا در ورژن های جدیدتر) قسمتی معمولا تحت عنوان web developer یا عباراتی شبیه به این وجود دارد که در آنها ابزارهای بسیار خوبی برای برنامه نویسان وب و مدیران سایت ها ارائه می شود، مثلا هنگام ورود به یک سایت یا صفحه، جزئیات کاملی از پاسخ های سرور نشان داده می شود، علاوه بر این، گوگل نیز در ابزار وبمستر خود امکانی تحت عنوان Fetch as Googlebot دارد که با آن می توانید صفحات خود را با ربات گوگل دریافت و از سالم بودن آنها اطمینان حاصل کنید، این خدمات گوگل در آدرس https://www.google.com/webmasters ارائه می شود.
نظرات شما عزیزان:
موضوعات مرتبط: بهنه سازي ، ،
برچسبها: